# import os
# import shutil
#
#
# def batch_move_files(source_folder, base_target_folder):
#     """
#     将源文件夹中的图片文件按照文件名前8位数字分类移动到目标文件夹
#
#     参数:
#     source_folder: 源文件夹路径（例如: "E:\\image"）
#     base_target_folder: 基础目标文件夹路径（例如: "E:\\2025年音频文件_已完成\\2"）
#     """
#     # 确保源文件夹存在
#     if not os.path.exists(source_folder):
#         print(f"错误: 源文件夹 '{source_folder}' 不存在")
#         return
#
#     # 遍历源文件夹中的所有文件
#     for filename in os.listdir(source_folder):
#         # 检查是否为.jpg文件
#         if filename.lower().endswith('.jpg'):
#             # 提取文件名的前8位数字（如00198201）
#             num_part = filename[:8]
#
#             # 构建目标文件夹路径
#             target_folder = os.path.join(base_target_folder, num_part, "IMG", "压缩")
#
#             # 确保目标文件夹存在
#             os.makedirs(target_folder, exist_ok=True)
#
#             # 源文件完整路径
#             source_file = os.path.join(source_folder, filename)
#
#             # 目标文件完整路径
#             target_file = os.path.join(target_folder, filename)
#
#             # 拷贝文件（如果文件不存在于目标文件夹）
#             if not os.path.exists(target_file):
#                 shutil.copy2(source_file, target_file)
#                 print(f"成功拷贝: {filename} -> {target_file}")
#             else:
#                 print(f"跳过: {filename} 已存在于目标文件夹")
#
#
# # 设置您的路径
# source_folder = r"E:\image"
# base_target_folder = r"E:\2025年音频文件_已完成\2"
#
# # 执行批量处理
# batch_move_files(source_folder, base_target_folder)
# print("\n文件处理完成！")


import os
import shutil
import re


def classify_and_move_files(source_folder, base_target_folder):
    """
    根据文件名规则分类移动文件

    规则说明：
    - 包含_A或_B + .jpg -> 目标: {数字部分}\IMG\压缩
    - 包含_A或_B + .tif -> 目标: {数字部分}\IMG\原始
    - 包含_F或_Z + .jpg -> 目标: {数字部分}\PIC\压缩
    - 包含_F或_Z + .TIF -> 目标: {数字部分}\PIC\原始
    """
    # 确保源文件夹存在
    if not os.path.exists(source_folder):
        print(f"错误: 源文件夹 '{source_folder}' 不存在")
        return

    # 遍历所有文件
    for filename in os.listdir(source_folder):
        # 跳过非图片文件
        if not filename.lower().endswith(('.jpg', '.jpeg', '.tif', '.tiff')):
            continue

        # 提取数字部分 (前8位)
        num_part = filename[:8]
        if not num_part.isdigit():
            print(f"跳过: 文件名前8位非数字 - {filename}")
            continue

        # 提取类型标识 (下划线后的第一个字母)
        parts = filename.split('_')
        if len(parts) < 2:
            print(f"跳过: 文件名格式错误 - {filename}")
            continue

        type_char = parts[1].upper()  # 转为大写统一处理
        # 获取文件拓展名并且转化为小写.jpg
        file_ext = os.path.splitext(filename)[1].lower()

        # 根据规则确定目标目录
        if type_char[0] in ['A', 'B']:
            main_dir = "IMG"
            if file_ext.upper() == '.JPG':
                sub_dir = "压缩"
            elif file_ext.upper() == '.TIF':
                sub_dir = "原始"
        elif type_char[0] in ['F', 'Z']:
            main_dir = "PIC"
            if file_ext.upper() == '.JPG':
                sub_dir = "压缩"
            elif file_ext.upper() == '.TIF':
                sub_dir = "原始"
        else:
            print(f"跳过: 未知类型标识 - {type_char} in {filename}")
            continue

        # 构建完整目标路径
        target_folder = os.path.join(base_target_folder, num_part, main_dir, sub_dir)
        os.makedirs(target_folder, exist_ok=True)

        # 源文件路径
        source_file = os.path.join(source_folder, filename)
        target_file = os.path.join(target_folder, filename)

        # 拷贝文件 (避免覆盖)
        if not os.path.exists(target_file):
            shutil.copy2(source_file, target_file)
            print(f"移动成功: {filename} -> {target_file}")
        else:
            print(f"跳过: 文件已存在 - {filename}")


# 配置您的路径 (请根据实际情况修改)
source_folder = r"E:\image"  # 源文件夹
base_target_folder = r"E:\2025年音频文件_已完成\2"  # 基础目标文件夹

# 执行分类移动
classify_and_move_files(source_folder, base_target_folder)
print("\n分类移动完成！共处理 {} 个文件".format(
    len([f for f in os.listdir(source_folder) if f.lower().endswith(('.jpg', '.jpeg', '.tif', '.tiff'))])))